package Repositorio;

import ClassesBasicas.Selecao;
import ClassesBasicas.SumulaJogo;
import Conexao.GConexao;
import Conexao.IConexao;
import erro.ConexaoException;
import erro.RepositorioException;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;


/**
 * Camada de acesso aos dados da classe Sumula_Jogo ao DAO.
 * 
 * @author leyla
 *
 */

public class RepSumulaJogo implements IRepSumulaJogo{
	
	/*Representa o IGCconexão*/
	private IConexao conexao;
	
	/**
	 * Quando o objeto RepSumulaJogo for instanciado, este construtor irá
	 * instanciar o GConexão com uma Singleton da GConexão.
	 * 
	 */
	
	public RepSumulaJogo(){
		conexao = GConexao.getInstancia();
	}
	
	/**
	 * Implementação do método responsável  para salvar a Sumula do Jogo no banco de dados.
	 * 
	 */

@Override
public void salvar(SumulaJogo sum) throws ConexaoException,RepositorioException {
		
		Connection c = conexao.conectar();
		
		String sqlSalvaSum = "INSERT INTO sumula_jogo(cod_Jogo,tempo_Sumula,ator_Sumula,placar_Jogo,data_Jogo," +
				"gol_con_Jogo,gol_man_Jogo,Selecao_cod_Selecao,Selecao_cod_Selecao1,Estadio_cod_Estadio)" +
				"VALUES (?,?,?,?,?,?,?,?,?,?,?);";
		
		try {
			PreparedStatement pstm = c.prepareStatement(sqlSalvaSum);
			pstm.setInt(1, sum.getCodJogo());
			pstm.setString(2, sum.getTempoSumula());
			pstm.setString(3, sum.getAtorSumula());
			pstm.setString(4, sum.getPlacarJogo());
			pstm.setDate(5, (Date) sum.getDataJogo());
			pstm.setInt(6, sum.getGolConJogo());
			pstm.setInt(7, sum.getGolManJogo());
			pstm.setInt(8, sum.getCodSelecao1());
			pstm.setInt(9, sum.getCodSelecao2());
			pstm.setInt(10, sum.getCodEstadio());
			pstm.executeUpdate();
			pstm.close();
			
		} catch (SQLException e) {
			throw new RepositorioException(e.getMessage());
		}
		finally{
			conexao.desconectar(c);
		}
	}
	
	/**
	 * Exibir Sumula do Jogo pesquisando por Data do Jogo
	 * 
	 * @author Leyla
	 */
	
@Override
public SumulaJogo consultar(int codSumulaJogo) throws ConexaoException,RepositorioException {
		
		Selecao s1 = null;
		Selecao s2 = null;
		SumulaJogo sum = null;
				
		Connection c = conexao.conectar();
		
		String sqlConsultSumById = "SELECT s.cod_Sumula, s.cod_Jogo, s.tempo_Sumula, s.ator_Sumula, s.placar_Jogo, s.data_Jogo, " +
				"s.gol_con_Jogo, s.gol_man_Jogo, s.Selecao_cod_Selecao, s.Selecao_cod_Selecao1" +
				"FROM sumula_jogo as s " +
				"INNER JOIN selecao as se " +
				"ON s.Selecao_cod_Selecao or s.Selecao_cod_Selecao1 = se.cod_Selecao " +
				"WHERE s.cod_Sumula = ? "; 
		
		try {
			PreparedStatement pstm = c.prepareStatement(sqlConsultSumById);
			pstm.setInt(1, codSumulaJogo);
			ResultSet result = pstm.executeQuery();
			
			if(result.next()){
				
				s1 = new Selecao();
				s2 = new Selecao();
				sum  = new SumulaJogo();
				
				s1.setCodSelecao(result.getInt("codSelecao"));
				s1.setNomeSelecao(result.getString("nomeSelecao"));
				
				s2.setCodSelecao(result.getInt("codSelecao"));
				s2.setNomeSelecao(result.getString("nomeSelecao"));
				
				sum.setCodSumula(result.getInt("codSumula"));
				sum.setCodJogo(result.getInt("codSumulaJogo"));
				sum.setTempoSumula(result.getString("tempoSumula"));
				sum.setAtorSumula(result.getString("atorSumula"));
				sum.setPlacarJogo(result.getString("placarJogo"));
				sum.setDataJogo(result.getDate("dataJogo"));
				sum.setGolConJogo(result.getInt("golConJogo"));
				sum.setGolManJogo(result.getInt("golManJogo"));
				sum.setCodSelecao1(result.getInt("codSelecao1"));
				sum.setCodSelecao2(result.getInt("codSelecao2"));
				
				sum.setSelecao1(s1);
				sum.setSelecao2(s2);
				
			}
			
		} catch (SQLException e) {
			throw new RepositorioException(e.getMessage());
		}
		finally{
			conexao.desconectar(c);
		}
		
		return sum;
	}
	
	
	/**
	 * Excluir Sumula_Jogo pelo código da sumula
	 * 
	 * @author Leyla
	 * 
	 */
	
@Override
public void excluirSumula(int codSumula) throws ConexaoException, RepositorioException {
			
		Connection c = conexao.conectar();
		
		String sqlExcluirSumula = "DELETE FROM sumula_jogo WHERE(cod_sumula = ?)";
		
		try {
			
			PreparedStatement pstm = c.prepareStatement(sqlExcluirSumula);
			pstm.setInt(1, codSumula);
			pstm.executeUpdate();
			pstm.close();
		
		} catch (SQLException e) {
			throw new RepositorioException(e.getMessage());
		}
		finally{
			conexao.desconectar(c);
		}

	}

        // Excluir Sumula_Jogo pelo codigo do jogo
        
@Override
public void excluirJogo(int codJogo) throws ConexaoException, RepositorioException {
			
		Connection c = conexao.conectar();
		
		String sqlExcluirSumula = "DELETE FROM sumula_jogo WHERE(cod_jogo = ?)";
		
		try {
			
			PreparedStatement pstm = c.prepareStatement(sqlExcluirSumula);
			pstm.setInt(1, codJogo);
			pstm.executeUpdate();
			pstm.close();
		
		} catch (SQLException e) {
			throw new RepositorioException(e.getMessage());
		}
		finally{
			conexao.desconectar(c);
		}

	}

    @Override
    public void alterar(SumulaJogo sj) throws ConexaoException, RepositorioException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Collection<SumulaJogo> listar() throws ConexaoException, RepositorioException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
// Alteraçao
//public void alterar(int codSumula) throws ConexaoException, RepositorioException{
               
         /*Connection c = conexao.conectar();
         String sqlAlterarSumulaByID;
         
                 
         sqlAlterarSumulaByID = "UPDATE SumulaJogo SET ator_sumula =? WHERE (cod_sumula=?)";
         
         try {
             PreparedStatement pstm = c.prepareStatement(sqlAlterarSumulaByID);
             pstm.setString(1, getAtorSumula());
             pstm.setInt(2, getCodSumula());
             pstm.executeUpdate();
             pstm.close();
         }
         
         catch (SQLException e){
             throw new RepositorioException();
         }
         
         finally
         {
             conexao.desconectar(c);
         }*/
       
        
	/**
	 * Listar Sumulas do Jogo
	 * 
	 * @author Leyla
	 * 
	 */
	
    //@Override
/*public Collection<SumulaJogo> listar() throws ConexaoException, RepositorioException {
		
       Collection<SumulaJogo> lista = new ArrayList<SumulaJogo>();
		
		Selecao s1 = null;
		Selecao s2 = null;
		SumulaJogo sum = null;
		
	Connection c = conexao.conectar();
		
		String sqlConsultSumById = "SELECT SJ.COD_SUMULA, SJ.COD_JOGO, SJ.TEMPO_SUMULA, SJ.ATOR_SUMULA, SJ.PLACAR_JOGO, SJ.DATA_JOGO, " +
				"SJ.GOL_CON_JOGO, SJ.GOL_MAN_JOGO, SJ.SELECAO_COD_SELECAO, SJ.SELECAO_COD_SELECAO1, SJ.ESTADIO_COD_ESTADIO " +
				"FROM SUMULA_JOGO AS SJ"; 
		
	try {
		PreparedStatement pstm = c.prepareStatement(sqlConsultSumById);
		ResultSet result = pstm.executeQuery();
			
		while(result.next()){
				
			s1 = new Selecao();
			s2 = new Selecao();
			sum  = new SumulaJogo();
				
			s1.setCodSelecao(result.getInt("codSelecao"));
			s1.setNomeSelecao(result.getString("nomeSelecao"));
			
			s2.setCodSelecao(result.getInt("codSelecao"));
			s2.setNomeSelecao(result.getString("nomeSelecao"));
				
			sum.setCodSumula(result.getInt("codSumula"));
			sum.setCodJogo(result.getInt("codSumulaJogo"));
			sum.setTempoSumula(result.getString("tempoSumula"));
			sum.setAtorSumula(result.getString("atorSumula"));
			sum.setPlacarJogo(result.getString("placarJogo"));
			sum.setDataJogo(result.getDate("dataJogo"));
			sum.setGolConJogo(result.getInt("golConJogo"));
			sum.setGolManJogo(result.getInt("golManJogo"));
			sum.setCodSelecao1(result.getInt("codSelecao1"));
			sum.setCodSelecao2(result.getInt("codSelecao2"));
				
			sum.setSelecao1(s1);
			sum.setSelecao2(s2);

			lista.add(sum);
                }
	}
                
                catch (SQLException e) 
                    {
			throw new RepositorioException(e.getMessage());
                    }
		finally
                    {
			conexao.desconectar(c);
                    }
				
		return lista;
	}

    @Override
    public void alterar(SumulaJogo sj) throws ConexaoException, RepositorioException {
        throw new UnsupportedOperationException("Not supported yet.");
    }*/


